const {ccclass, property} = cc._decorator;

@ccclass
export default class pos_ui extends cc.Component {

    @property({type: cc.EditBox, tooltip: '当前组件'})
    now_pos: cc.EditBox = null;

    @property({type: cc.Node, tooltip: '该点的坐标'})
    pos_node: cc.Node[] = [];

    /** 上一次点击的坐标 */
    private first_on_pos: cc.Vec2 = null;

    /** 当前的贝塞尔序号 */
    now_no: number = 0;

    /** 当前的贝塞尔坐标 */
    now_bezier_pos: cc.Vec2[] = [];

    // onLoad () {}

    start () {
        //注册拖动事件
        this.node.on(cc.Node.EventType.TOUCH_START, this.on, this, true);
        this.node.on(cc.Node.EventType.TOUCH_MOVE, this.move, this, true);
    }

    on(touch: cc.Event.EventTouch){
        this.first_on_pos = touch.touch.getLocation();
    }

    move(touch: cc.Event.EventTouch){
        let touch_pos = touch.touch.getLocation();//当前触点世界坐标
        let last_pos = touch_pos.sub(this.first_on_pos); //跟上次的坐标差
        this.node.setPosition(this.node.getPosition().add(last_pos));
        this.first_on_pos = touch_pos;
    }

    /**
     * 显示ui
     * @param no 当前的选择点
     * @param pos_array 选择点的坐标
     */
    show_ui(no: number, pos_array: cc.Vec2[]){
        this.node.active = true;
        console.log('看数据', no, ',', pos_array);
        this.now_no = no;
        this.now_bezier_pos = pos_array;
        this.show_data();
    }

    /**
     * 隐藏ui
     */
    hide_ui(){
        this.node.active = false;
    }

    /**
     * 显示数据
     */
    show_data(){
        this.now_pos.string = this.now_no.toString();

        for(let i = 0; i < this.pos_node.length; i++){
            let x = Math.floor(this.now_bezier_pos[i].x * 10) / 10;
            let y = Math.floor(this.now_bezier_pos[i].y * 10) / 10;
            this.pos_node[i].getChildByName('editBox_X').getComponent(cc.EditBox).string = x.toString();
            this.pos_node[i].getChildByName('editBox_Y').getComponent(cc.EditBox).string = y.toString();
        }
    }

    /**
     * 改变当前数据
     */
    update_pos(pos_array: cc.Vec2[], no?: number){
        if(no){
            this.now_no = no;
        }
        this.now_bezier_pos = pos_array;
        if(this.node.active == true){
            this.show_data();
        }
    }

    /**
     * 改变输入值
     */
    change_pos(){
        //重新获得坐标
        let pos: cc.Vec2[] = [];
        for(let i = 0; i < this.pos_node.length; i++){
            let x = Number(this.pos_node[i].getChildByName('editBox_X').getComponent(cc.EditBox).string);
            let y = Number(this.pos_node[i].getChildByName('editBox_Y').getComponent(cc.EditBox).string);
            if(x == NaN){
                x = 0;
                console.error('不要输入奇怪的东西:', x);
            }
            if(y == NaN){
                y = 0;
                console.error('不要输入奇怪的东西:', y);
            }
            let the_pos = cc.v2(x,y);
            pos.push(the_pos);
        }

        cc.find('Canvas/bezier_manager').getComponent('bezier_manager').set_now_pos(pos);
    }

    /**
     * 切换节点
     */
    change_node(){
        //判断是否可以跳转到点上
        let last_no = Number(this.now_pos.string);
        if(last_no == NaN){
            this.now_pos.string = this.now_no.toString();
            console.error('不要输入奇怪的东西');
            return;
        }

        this.now_no = last_no;
        //上报跳转点
        cc.find('Canvas/bezier_manager').getComponent('bezier_manager').change_bezier_no(this.now_no);
    }

    // update (dt) {}
}
